css: Replace _AFFECTS_TEXT with _TEXT_SIZE and _TEXT_CLIP
authorTimm Bäder <mail@baedert.org>
Thu, 12 Oct 2017 11:18:07 +0000 (13:18 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 10 Dec 2017 01:16:02 +0000 (20:16 -0500)
It was used to mark css properties that affect widgets with text, but it
caused unnecessary invalidations. E.g. 'color' was marked as
AFFECTS_TEXT but changing just the color of a label should not
automatically queue a resize, which is what the code in
gtk_widget_real_style_updated does.

Replace this flag with GTK_CSS_AFFECTS_TEXT_SIZE and
GTK_CSS_AFFECTS_TEXT_CLIP, which GtkWidget can use only if the widget
actually has text.

https://bugzilla.gnome.org/show_bug.cgi?id=791281

gtk/gtkbuiltinicon.c
gtk/gtkcssstylepropertyimpl.c
gtk/gtkcsstypesprivate.h
gtk/gtkprogressbar.c
gtk/gtkscale.c
gtk/gtkswitch.c
gtk/gtktextview.c
gtk/gtkwidget.c

index feedb2cbf80f8c02313747c90ce7dfead99037d4..1535a2c473efd3c3157d0c1dacd1bb69c319f055 100644 (file)
@@ -167,7 +167,7 @@ gtk_builtin_icon_style_changed (GtkCssGadget      *gadget,
 {
   GtkBuiltinIconPrivate *priv = gtk_builtin_icon_get_instance_private (GTK_BUILTIN_ICON (gadget));
 
-  if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_FONT))
+  if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT))
     priv->strikethrough_valid = FALSE;
 
   GTK_CSS_GADGET_CLASS (gtk_builtin_icon_parent_class)->style_changed (gadget, change);
index 9fd506a0ca1cc2ff5fb1d9a15649202f1065a0a7..92e32f6302d96e21a97888715bf1e9cc1a9f2fd9 100644 (file)
@@ -1058,7 +1058,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_COLOR,
                                           GDK_TYPE_RGBA,
                                           GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_FOREGROUND | GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_SYMBOLIC_ICON,
+                                          GTK_CSS_AFFECTS_CONTENT | GTK_CSS_AFFECTS_SYMBOLIC_ICON,
                                           color_parse,
                                           color_query,
                                           color_assign,
@@ -1067,7 +1067,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_DPI,
                                           G_TYPE_NONE,
                                           GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_FONT | GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_SIZE,
+                                          GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_TEXT_SIZE,
                                           dpi_parse,
                                           NULL,
                                           NULL,
@@ -1076,7 +1076,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_FONT_SIZE,
                                           G_TYPE_DOUBLE,
                                           GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_FONT | GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_SIZE,
+                                          GTK_CSS_AFFECTS_SIZE | GTK_CSS_AFFECTS_TEXT_SIZE,
                                           font_size_parse,
                                           query_font_size,
                                           assign_font_size,
@@ -1117,7 +1117,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_FONT_FAMILY,
                                           G_TYPE_STRV,
                                           GTK_STYLE_PROPERTY_INHERIT,
-                                          GTK_CSS_AFFECTS_FONT | GTK_CSS_AFFECTS_TEXT,
+                                          GTK_CSS_AFFECTS_TEXT_SIZE,
                                           font_family_parse,
                                           font_family_query,
                                           font_family_assign,
@@ -1126,7 +1126,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_FONT_STYLE,
                                           PANGO_TYPE_STYLE,
                                           GTK_STYLE_PROPERTY_INHERIT,
-                                          GTK_CSS_AFFECTS_FONT | GTK_CSS_AFFECTS_TEXT,
+                                          GTK_CSS_AFFECTS_TEXT_SIZE,
                                           font_style_parse,
                                           font_style_query,
                                           font_style_assign,
@@ -1135,7 +1135,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_FONT_VARIANT,
                                           PANGO_TYPE_VARIANT,
                                           GTK_STYLE_PROPERTY_INHERIT,
-                                          GTK_CSS_AFFECTS_FONT | GTK_CSS_AFFECTS_TEXT,
+                                          GTK_CSS_AFFECTS_TEXT,
                                           font_variant_parse,
                                           font_variant_query,
                                           font_variant_assign,
@@ -1144,7 +1144,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_FONT_WEIGHT,
                                           PANGO_TYPE_WEIGHT,
                                           GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_FONT | GTK_CSS_AFFECTS_TEXT,
+                                          GTK_CSS_AFFECTS_TEXT_SIZE,
                                           font_weight_parse,
                                           font_weight_query,
                                           font_weight_assign,
@@ -1153,7 +1153,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_FONT_STRETCH,
                                           PANGO_TYPE_STRETCH,
                                           GTK_STYLE_PROPERTY_INHERIT,
-                                          GTK_CSS_AFFECTS_FONT | GTK_CSS_AFFECTS_TEXT,
+                                          GTK_CSS_AFFECTS_TEXT_SIZE,
                                           font_stretch_parse,
                                           font_stretch_query,
                                           font_stretch_assign,
@@ -1163,7 +1163,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_LETTER_SPACING,
                                           G_TYPE_NONE,
                                           GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_TEXT_ATTRS,
+                                          GTK_CSS_AFFECTS_TEXT_ATTRS,
                                           parse_letter_spacing,
                                           NULL,
                                           NULL,
@@ -1173,7 +1173,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_TEXT_DECORATION_LINE,
                                           G_TYPE_NONE,
                                           0,
-                                          GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_TEXT_ATTRS,
+                                          GTK_CSS_AFFECTS_TEXT_ATTRS,
                                           parse_text_decoration_line,
                                           NULL,
                                           NULL,
@@ -1182,7 +1182,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_TEXT_DECORATION_COLOR,
                                           G_TYPE_NONE,
                                           GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_TEXT_ATTRS,
+                                          GTK_CSS_AFFECTS_TEXT_ATTRS,
                                           color_parse,
                                           NULL,
                                           NULL,
@@ -1191,7 +1191,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_TEXT_DECORATION_STYLE,
                                           G_TYPE_NONE,
                                           0,
-                                          GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_TEXT_ATTRS,
+                                          GTK_CSS_AFFECTS_TEXT_ATTRS,
                                           parse_text_decoration_style,
                                           NULL,
                                           NULL,
@@ -1201,7 +1201,7 @@ _gtk_css_style_property_init_properties (void)
                                           GTK_CSS_PROPERTY_TEXT_SHADOW,
                                           G_TYPE_NONE,
                                           GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_TEXT | GTK_CSS_AFFECTS_CLIP,
+                                          GTK_CSS_AFFECTS_TEXT_CLIP,
                                           shadow_value_parse,
                                           NULL,
                                           NULL,
@@ -1855,7 +1855,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
                                           GTK_CSS_PROPERTY_CARET_COLOR,
                                           GDK_TYPE_RGBA,
                                           GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_TEXT,
+                                          GTK_CSS_AFFECTS_CONTENT,
                                           color_parse,
                                           color_query,
                                           color_assign,
@@ -1864,7 +1864,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
                                           GTK_CSS_PROPERTY_SECONDARY_CARET_COLOR,
                                           GDK_TYPE_RGBA,
                                           GTK_STYLE_PROPERTY_INHERIT | GTK_STYLE_PROPERTY_ANIMATED,
-                                          GTK_CSS_AFFECTS_TEXT,
+                                          GTK_CSS_AFFECTS_CONTENT,
                                           color_parse,
                                           color_query,
                                           color_assign,
index 59f392a032aefaacdb3fe64454d762ad2306f037..523551d0e5cc6f3815eef240607f403372e0b2c9 100644 (file)
@@ -96,13 +96,10 @@ typedef guint64 GtkCssChange;
 /*
  * GtkCssAffects:
  * @GTK_CSS_AFFECTS_FOREGROUND: The foreground rendering is affected.
- *   This does not include things that affect the font. For those,
- *   see @GTK_CSS_AFFECTS_FONT.
+ *   This does not include things that affect the font.
  * @GTK_CSS_AFFECTS_BACKGROUND: The background rendering is affected.
  * @GTK_CSS_AFFECTS_BORDER: The border styling is affected.
  * @GTK_CSS_AFFECTS_PANGO_LAYOUT: Font rendering is affected.
- * @GTK_CSS_AFFECTS_FONT: The font is affected and should be reloaded
- *   if it was cached.
  * @GTK_CSS_AFFECTS_TEXT: Text rendering is affected.
  * @GTK_CSS_AFFECTS_TEXT_ATTRS: Text attributes are affected.
  * @GTK_CSS_AFFECTS_ICON: Fullcolor icons and their rendering is affected.
@@ -122,26 +119,31 @@ typedef guint64 GtkCssChange;
  * Note that multiple values can be set.
  */
 typedef enum {
-  GTK_CSS_AFFECTS_FOREGROUND = (1 << 0),
-  GTK_CSS_AFFECTS_BACKGROUND = (1 << 1),
-  GTK_CSS_AFFECTS_BORDER = (1 << 2),
-  GTK_CSS_AFFECTS_FONT = (1 << 3),
-  GTK_CSS_AFFECTS_TEXT = (1 << 4),
-  GTK_CSS_AFFECTS_TEXT_ATTRS = (1 << 5),
-  GTK_CSS_AFFECTS_ICON = (1 << 6),
-  GTK_CSS_AFFECTS_SYMBOLIC_ICON = (1 << 7),
-  GTK_CSS_AFFECTS_OUTLINE = (1 << 8),
-  GTK_CSS_AFFECTS_CLIP = (1 << 9),
-  GTK_CSS_AFFECTS_SIZE = (1 << 10)
+  GTK_CSS_AFFECTS_CONTENT       = (1 << 0),
+  GTK_CSS_AFFECTS_BACKGROUND    = (1 << 1),
+  GTK_CSS_AFFECTS_BORDER        = (1 << 2),
+  GTK_CSS_AFFECTS_TEXT_ATTRS    = (1 << 4),
+  GTK_CSS_AFFECTS_TEXT_SIZE     = (1 << 5),
+  GTK_CSS_AFFECTS_TEXT_CLIP     = (1 << 6),
+  GTK_CSS_AFFECTS_ICON          = (1 << 7),
+  GTK_CSS_AFFECTS_SYMBOLIC_ICON = (1 << 8),
+  GTK_CSS_AFFECTS_OUTLINE       = (1 << 9),
+  GTK_CSS_AFFECTS_CLIP          = (1 << 10),
+  GTK_CSS_AFFECTS_SIZE          = (1 << 11),
+  GTK_CSS_AFFECTS_POSTEFFECT    = (1 << 12)
 } GtkCssAffects;
 
-#define GTK_CSS_AFFECTS_REDRAW (GTK_CSS_AFFECTS_FOREGROUND |    \
+#define GTK_CSS_AFFECTS_REDRAW (GTK_CSS_AFFECTS_CONTENT |       \
                                 GTK_CSS_AFFECTS_BACKGROUND |    \
                                 GTK_CSS_AFFECTS_BORDER |        \
                                 GTK_CSS_AFFECTS_ICON |          \
                                 GTK_CSS_AFFECTS_SYMBOLIC_ICON | \
                                 GTK_CSS_AFFECTS_OUTLINE)
 
+#define GTK_CSS_AFFECTS_TEXT (GTK_CSS_AFFECTS_TEXT_SIZE | \
+                              GTK_CSS_AFFECTS_TEXT_CLIP)
+
+
 enum { /*< skip >*/
   GTK_CSS_PROPERTY_COLOR,
   GTK_CSS_PROPERTY_DPI,
index 1dfef0374ee646c480816d2b959044a4ee754f02..509855897582b58886926c884e18c66db0675f8c 100644 (file)
@@ -1521,7 +1521,7 @@ gtk_progress_bar_text_style_changed (GtkCssNode        *node,
 {
   if (change == NULL ||
       gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT_ATTRS) ||
-      gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_FONT))
+      gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT))
     {
       gtk_widget_queue_resize (GTK_WIDGET (pbar));
     }
index 18bb7f8cc377bacb25d06392b644661f3796ff43..b3f0d368009e16cef6cb4fc292373a0f54f53c49 100644 (file)
@@ -1594,7 +1594,7 @@ gtk_scale_value_style_changed (GtkCssNode        *node,
 {
   if (change == NULL ||
       gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT_ATTRS) ||
-      gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_FONT))
+      gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT))
     {
       gtk_scale_clear_value_layout (scale);
       gtk_widget_queue_resize (GTK_WIDGET (scale));
@@ -1608,7 +1608,7 @@ gtk_scale_mark_style_changed (GtkCssNode        *node,
 {
   if (change == NULL ||
       gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT_ATTRS) ||
-      gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_FONT))
+      gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT))
     {
       GtkCssNode *widget_node;
       GtkWidget *scale;
index 15f11a4649cecf860bd27d03540e19f5222700a3..6572a340fe63b773660f3c4e5ae23c2c2999e388 100644 (file)
@@ -332,7 +332,7 @@ gtk_switch_style_updated (GtkWidget *widget)
   context = gtk_widget_get_style_context (widget);
   change = gtk_style_context_get_change (context);
 
-  if (change == NULL || gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_FONT))
+  if (change == NULL || gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT))
     gtk_switch_create_pango_layouts (self);
 }
 
index 1b001bb68b8c5f3674c28068fb233768052e8d10..3c9d9f6884ba8029e157770ee62167a16b91db80 100644 (file)
@@ -4895,7 +4895,7 @@ gtk_text_view_style_updated (GtkWidget *widget)
   style_context = gtk_widget_get_style_context (widget);
   change = gtk_style_context_get_change (style_context);
 
-  if ((change == NULL || gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_FONT)) &&
+  if ((change == NULL || gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT)) &&
       priv->layout && priv->layout->default_style)
     {
       gtk_text_view_set_attributes_from_style (text_view,
index efab39953c19ab39b987b938fba6565d7fe16bf4..ee4ae277e00ea2f67001d2b682dbd3ed4a88a8a6 100644 (file)
@@ -8168,22 +8168,29 @@ gtk_widget_real_style_updated (GtkWidget *widget)
   if (widget->priv->context)
     {
       GtkCssStyleChange *change = gtk_style_context_get_change (widget->priv->context);
-      gboolean has_text = gtk_widget_peek_pango_context (widget) != NULL;
+      const gboolean has_text = gtk_widget_peek_pango_context (widget) != NULL;
 
-      if (change == NULL ||
-          (has_text && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_FONT)))
+      if (has_text && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT))
         gtk_widget_update_pango_context (widget);
 
       if (widget->priv->anchored)
         {
           if (change == NULL ||
               gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_SIZE) ||
-              (has_text && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT)))
-            gtk_widget_queue_resize (widget);
-          else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_CLIP))
-            gtk_widget_queue_allocate (widget);
+              (has_text && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT_SIZE)))
+            {
+              gtk_widget_queue_resize (widget);
+            }
+          else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_CLIP) ||
+                   (has_text && gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_TEXT_CLIP)))
+            {
+              gtk_widget_queue_allocate (widget);
+            }
           else if (gtk_css_style_change_affects (change, GTK_CSS_AFFECTS_REDRAW))
-            gtk_widget_queue_draw (widget);
+
+            {
+                gtk_widget_queue_draw (widget);
+            }
         }
     }
   else